home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / dev / amos / samplesm.lha / SamplesMaster.AMOS / SamplesMaster.amosSourceCode
Encoding:
AMOS Source Code  |  1999-07-22  |  44.6 KB  |  1,417 lines

  1. '-> SamplesMaster by Stefano Regattin  
  2. 'i> 7 luglio 1996
  3. 'm> 8,9,11,13,15,16,21,22,23,25,27,28,30 luglio 1996 
  4. 'm> 1,2,4,7,8,10,12,13,14,16,17,20,21,28,29 agosto 1996
  5. 'm> 4,12,13,17 ottobre 1996
  6. 'm> 1,11,13,14 novembre 1996 
  7. 'm> 20 febbraio 1997 
  8. 'm> 8 marzo 1997 
  9. 'm> 17 giugno 1997 
  10. 'm> 10 novembre 1997 
  11. 'm> 31 marzo 1998
  12. 'm> 3,4,5,8,9,11,20,25,26,27,29 aprile 1998
  13. 'm> 5,7,8,9,19,23 luglio 1998  
  14. 'm> 11 agosto 1998 
  15. 'm> 24 aprile 1999 
  16. 'm> 22 luglio 1999 
  17. '------------------
  18. Set Buffer 40
  19. BANCO=65535
  20. BANCODIIO=65534
  21. BANCO3=65533
  22. Global ANNOTAZIONI$,FILE$,NOMEFILE$,ZONAATTIVA$
  23. Global ALTEZZA,ANOMALOIFF,BANCO,BANCODIIO,BANCO3,CICLO,FILTRO
  24. Global FINECAMPIONE,FREQUENZA,GENERACAMPIONE,INIZIO,INIZIOCAMPIONE
  25. Global LUNGHEZZACAMPIONE,NUOVAFINECAMPIONE,NUOVAFREQUENZA,NUOVOINIZIOCAMPIONE
  26. Global PASSO,POSIZIONEINGRANDIMENTO,POSIZIONESLIDER,RIDUZIONE,SENZAMEMORIA
  27. Global ULTIMALINEA,XLINEAFINECAMPIONE,XLINEAINIZIOCAMPIONE
  28. Global YSLIDERINGRANDIMENTO,ZERO
  29. Global DIVISIONESLIDERINGRANDIMENTO#
  30. Dim F0RMADONDA(8191)
  31. Global F0RMADONDA()
  32. Proc SETTASCHERMO
  33. Proc ARCOBALENO
  34. Reserve As Chip Work BANCO,512
  35. FILTRO=True
  36. FREQUENZA=8363
  37. Proc CONDIZIONEINIZIALE
  38. Repeat 
  39.  Repeat 
  40.   TASTODELTOPOPREMUTO=Mouse Key
  41.   ZONATOPO=Mouse Zone
  42.   If TASTODELTOPOPREMUTO=1
  43.    If DENTROZONA=False
  44.     If ZONATOPO=1
  45.      Inverse On : Print At(0,ULTIMALINEA-3);"Suona"
  46.      Proc SUONA
  47.     End If 
  48.     If ZONATOPO=2
  49.      Inverse On : Print At(0,ULTIMALINEA-2);"Ferma"
  50.      Sam Stop 
  51.     End If 
  52.     If ZONATOPO=3
  53.      CICLO= Not CICLO : Proc CICLO
  54.     End If 
  55.     If ZONATOPO=4
  56.      FILTRO= Not FILTRO : Proc FILTRO
  57.     End If 
  58.     If ZONATOPO=5
  59.      Inverse On : Print At(19,ULTIMALINEA-2);"Tutto"
  60.      NUOVOINIZIOCAMPIONE=Start(BANCO)
  61.      NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
  62.      LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  63.      LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  64.      Proc MOSTRACAMPIONE
  65.      INIZIO=True : Proc INIZIO
  66.      POSIZIONESLIDER=0
  67.      Proc SLIDERINGRANDIMENTO
  68.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  69.     End If 
  70.     If ZONATOPO=6
  71.      Inverse On : Print At(26,ULTIMALINEA-2);"Tra le linee"
  72.      Proc MOSTRACAMPIONE
  73.      INIZIO=True : Proc INIZIO
  74.      POSIZIONESLIDER=0
  75.      Proc SLIDERINGRANDIMENTO
  76.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  77.     End If 
  78.     If ZONATOPO=7
  79.      INIZIO=True : Proc INIZIO
  80.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  81.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  82.      Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
  83.     End If 
  84.     If ZONATOPO=8
  85.      INIZIO=False : Proc INIZIO
  86.      POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  87.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  88.      Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
  89.     End If 
  90.     If ZONATOPO=9
  91.      Inverse On : Print At(51,ULTIMALINEA-2);"<Indietro"
  92.      If INIZIO=True
  93.       Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,False] : NUOVOINIZIOCAMPIONE=Param
  94.       LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  95.       NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  96.      Else 
  97.       Proc CERCALOZERO[NUOVAFINECAMPIONE,False] : NUOVAFINECAMPIONE=Param
  98.       LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  99.       NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  100.      End If 
  101.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  102.      Proc SLIDERINGRANDIMENTO
  103.      Proc LINEE : Proc INGRANDISCI
  104.     End If 
  105.     If ZONATOPO=10
  106.      Inverse On : Print At(61,ULTIMALINEA-2);"Avanti>"
  107.      If INIZIO=True
  108.       Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,True] : NUOVOINIZIOCAMPIONE=Param
  109.       LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  110.       NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  111.      Else 
  112.       Proc CERCALOZERO[NUOVAFINECAMPIONE,True] : NUOVAFINECAMPIONE=Param
  113.       LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  114.       NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  115.      End If 
  116.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  117.      Proc SLIDERINGRANDIMENTO
  118.      Proc LINEE : Proc INGRANDISCI
  119.     End If 
  120.     If ZONATOPO=11
  121.      Inverse On : Print At(69,ULTIMALINEA-3);"Carica" : Inverse Off 
  122.      Proc CARICAUNFILE
  123.      Exit If SENZAMEMORIA=True,2
  124.      If Exist(FILE$)
  125.       Proc CARICARAWOIFF
  126.       Proc CONDIZIONEINIZIALE
  127.      End If 
  128.     End If 
  129.     If ZONATOPO=12
  130.      If ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  131.       Proc TIC[Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento di un Byte",ULTIMALINEA]
  132.       If INIZIO=True
  133.        NUOVOINIZIOCAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
  134.        NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
  135.       Else 
  136.        NUOVAFINECAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
  137.        NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
  138.       End If 
  139.       POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  140.       Proc SLIDERINGRANDIMENTO
  141.       Proc LINEE : Proc INGRANDISCI
  142.      Else 
  143.       ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  144.       Proc MOSTRALAZONAATTIVA
  145.      End If 
  146.      NUOVOMESSAGGIO=True
  147.     End If 
  148.     If ZONATOPO=13
  149.      If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  150.       If INIZIO=True
  151.        NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
  152.        NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
  153.        POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  154.       Else 
  155.        NUOVAFINECAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
  156.        NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
  157.        POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-320
  158.       End If 
  159.       POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  160.       Proc SLIDERINGRANDIMENTO
  161.       Proc LINEE : Proc INGRANDISCI
  162.      Else 
  163.       ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  164.       Proc MOSTRALAZONAATTIVA
  165.      End If 
  166.     End If 
  167.     If ZONATOPO=14
  168.      Inverse On : Print At(6,ULTIMALINEA-2);"Genera" : Inverse Off 
  169.      Proc GENERACAMPIONE
  170.      GENERACAMPIONE=False
  171.      Proc CONDIZIONEINIZIALE
  172.     End If 
  173.     If ZONATOPO=15
  174.      Inverse On : Print At(69,ULTIMALINEA-2);"Salva"
  175.      Proc SALVAUNFILE
  176.      Proc MESSAGGI
  177.     End If 
  178.     If ZONATOPO=16
  179.      Exit 2
  180.     End If 
  181.     If ZONATOPO=18
  182.      Inverse On 
  183.      Print At(0,ULTIMALINEA-5);"Frequenza"
  184.      TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  185.      NUOVAFREQUENZA=FREQUENZA
  186.      Proc FREQUENZA
  187.      NUOVOMESSAGGIO=True
  188.     End If 
  189.     If ZONATOPO=19
  190.      Inverse On 
  191.      Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
  192.      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  193.      Inc NUOVAFREQUENZA
  194.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  195.      Proc FREQUENZA
  196.      NUOVOMESSAGGIO=True
  197.     End If 
  198.     If ZONATOPO=20
  199.      Inverse On 
  200.      Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
  201.      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  202.      Dec NUOVAFREQUENZA
  203.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  204.      Proc FREQUENZA
  205.      NUOVOMESSAGGIO=True
  206.     End If 
  207.     If ZONATOPO=21
  208.      Inverse On : Print At(26,ULTIMALINEA-5);"MixTimbri" : Inverse Off 
  209.      Proc MISCELATIMBRI
  210.      GENERACAMPIONE=False
  211.      Proc CONDIZIONEINIZIALE
  212.     End If 
  213.     DENTROZONA=True
  214.    End If 
  215.    If ZONATOPO=17
  216.     POSIZIONESLIDER=X Screen(X Mouse)/DIVISIONESLIDERINGRANDIMENTO#
  217.     Proc SLIDERINGRANDIMENTO
  218.     POSIZIONEINGRANDIMENTO=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO-319
  219.     Proc INGRANDISCI
  220.    End If 
  221.   Else If TASTODELTOPOPREMUTO=2
  222.    If ZONATOPO=19
  223.     Inverse On 
  224.     Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
  225.     Proc TIC["Tasto destro del mouse>incremento veloce",ULTIMALINEA]
  226.     Inc NUOVAFREQUENZA
  227.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  228.     Proc FREQUENZA
  229.     NUOVOMESSAGGIO=True
  230.    End If 
  231.    If ZONATOPO=20
  232.     Inverse On 
  233.     Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
  234.     Proc TIC["Tasto destro del mouse>decremento veloce",ULTIMALINEA]
  235.     Dec NUOVAFREQUENZA
  236.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  237.     Proc FREQUENZA
  238.     NUOVOMESSAGGIO=True
  239.    End If 
  240.   Else 
  241.    Inverse Off 
  242.    Print At(0,ULTIMALINEA-3);"Suona"
  243.    Print At(0,ULTIMALINEA-2);"Ferma"
  244.    Print At(19,ULTIMALINEA-2);"Tutto"
  245.    Print At(26,ULTIMALINEA-2);"Tra le linee"
  246.    Print At(51,ULTIMALINEA-2);"<Indietro"
  247.    Print At(61,ULTIMALINEA-2);"Avanti>"
  248.    Print At(69,ULTIMALINEA-3);"Carica"
  249.    Print At(69,ULTIMALINEA-2);"Salva"
  250.    Print At(0,ULTIMALINEA-5);"Frequenza";Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  251.    Print At(26,ULTIMALINEA-5);"MixTimbri"
  252.    If NUOVOMESSAGGIO=True
  253.     Proc MESSAGGI
  254.     NUOVOMESSAGGIO=False
  255.    End If 
  256.    DENTROZONA=False
  257.   End If 
  258.   TASTOPREMUTO$=Inkey$
  259.  Until TASTOPREMUTO$<>""
  260.  If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  261.   If INIZIO=True
  262.    If TASTOPREMUTO$=Cright$
  263.     Add NUOVOINIZIOCAMPIONE,PASSO
  264.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  265.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  266.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  267.     Proc SLIDERINGRANDIMENTO
  268.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  269.    End If 
  270.    If TASTOPREMUTO$=Cleft$
  271.     Add NUOVOINIZIOCAMPIONE,-PASSO
  272.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  273.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  274.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  275.     Proc SLIDERINGRANDIMENTO
  276.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  277.    End If 
  278.   Else 
  279.    If TASTOPREMUTO$=Cright$
  280.     Add NUOVAFINECAMPIONE,PASSO
  281.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  282.     NUOVAFINECAMPIONE=Param : Proc LINEE
  283.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  284.     Proc SLIDERINGRANDIMENTO
  285.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  286.    End If 
  287.    If TASTOPREMUTO$=Cleft$
  288.     Add NUOVAFINECAMPIONE,-PASSO
  289.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  290.     NUOVAFINECAMPIONE=Param : Proc LINEE
  291.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  292.     Proc SLIDERINGRANDIMENTO
  293.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  294.    End If 
  295.   End If 
  296.  Else 
  297.   If INIZIO=True
  298.    If TASTOPREMUTO$=Cright$
  299.     If TASTODELTOPOPREMUTO=0
  300.      Add NUOVOINIZIOCAMPIONE,320
  301.     Else 
  302.      Inc NUOVOINIZIOCAMPIONE
  303.     End If 
  304.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  305.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  306.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  307.     Proc SLIDERINGRANDIMENTO
  308.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  309.    End If 
  310.    If TASTOPREMUTO$=Cleft$
  311.     If TASTODELTOPOPREMUTO=0
  312.      Add NUOVOINIZIOCAMPIONE,-320
  313.     Else 
  314.      Dec NUOVOINIZIOCAMPIONE
  315.     End If 
  316.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  317.     NUOVOINIZIOCAMPIONE=Param : Proc LINEE
  318.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  319.     Proc SLIDERINGRANDIMENTO
  320.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  321.    End If 
  322.   Else 
  323.    If TASTOPREMUTO$=Cright$
  324.     If TASTODELTOPOPREMUTO=0
  325.      Add NUOVAFINECAMPIONE,320
  326.     Else 
  327.      Inc NUOVAFINECAMPIONE
  328.     End If 
  329.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  330.     NUOVAFINECAMPIONE=Param : Proc LINEE
  331.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  332.     Proc SLIDERINGRANDIMENTO
  333.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  334.    End If 
  335.    If TASTOPREMUTO$=Cleft$
  336.     If TASTODELTOPOPREMUTO=0
  337.      Add NUOVAFINECAMPIONE,-320
  338.     Else 
  339.      Dec NUOVAFINECAMPIONE
  340.     End If 
  341.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  342.     NUOVAFINECAMPIONE=Param : Proc LINEE
  343.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  344.     Proc SLIDERINGRANDIMENTO
  345.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  346.    End If 
  347.   End If 
  348.  End If 
  349.  If TASTOPREMUTO$=Cup$
  350.   ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  351.   Proc MOSTRALAZONAATTIVA
  352.  End If 
  353.  If TASTOPREMUTO$=Cdown$
  354.   ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  355.   Proc MOSTRALAZONAATTIVA
  356.  End If 
  357.  If TASTOPREMUTO$=" "
  358.   Inverse On : Print At(0,ULTIMALINEA-3),"Suona"
  359.   Proc SUONA
  360.  End If 
  361.  If TASTOPREMUTO$="c"
  362.  End If 
  363.  If TASTOPREMUTO$="s"
  364.  End If 
  365. Until TASTOPREMUTO$=Chr$(27)
  366. Inverse On : Print At(76,ULTIMALINEA-2);"Esci" : Wait 50
  367. Erase BANCO : Reserve Zone : Rainbow Del 0 : Screen Close 0 : End 
  368. Procedure ARCOBALENO
  369. Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  370. Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  371. Set Rainbow 0,1,16,"","",""
  372. For LINEA=0 To 15 : Read DATO : Rain(0,LINEA)=DATO : Next LINEA
  373. If Ntsc Then LUNGHEZZAARCOBALENO=223 Else LUNGHEZZAARCOBALENO=271
  374. Rainbow 0,2,0,LUNGHEZZAARCOBALENO
  375. End Proc
  376. Procedure AZZERAFORMADONDA
  377. Shared LUNGHEZZASINTETICO
  378. For A=0 To LUNGHEZZASINTETICO-1
  379.  F0RMADONDA(A)=0
  380. Next A
  381. End Proc
  382. Procedure CARICARAWOIFF
  383. INDIRIZZO=Start(BANCODIIO)+8
  384. If Peek$(INDIRIZZO,4)="8SVX"
  385.  Add INDIRIZZO,12
  386.  LUNGHEZZABANCO=Leek(INDIRIZZO)
  387.  If LUNGHEZZABANCO=0
  388.   Add INDIRIZZO,4
  389.   LUNGHEZZABANCO=Leek(INDIRIZZO)
  390.  Else 
  391.   Add INDIRIZZO,4
  392.  End If 
  393.  Add INDIRIZZO,8
  394.  FREQUENZA=Deek(INDIRIZZO)
  395.  Add INDIRIZZO,8
  396.  If Peek$(INDIRIZZO,4)="NAME"
  397.   Add INDIRIZZO,4
  398.   DATO=Leek(INDIRIZZO)
  399.   Add INDIRIZZO,4+DATO
  400.  End If 
  401.  If Peek$(INDIRIZZO,4)="ANNO"
  402.   Add INDIRIZZO,4
  403.   DATO=Leek(INDIRIZZO)
  404.   Add INDIRIZZO,4
  405.   ANNOTAZIONI$=Peek$(INDIRIZZO,DATO)-Chr$(0)
  406.   Add INDIRIZZO,DATO
  407.  End If 
  408.  If Peek$(INDIRIZZO,4)="BODY"
  409.   Add INDIRIZZO,4
  410.   LUNGHEZZADATI=Leek(INDIRIZZO)
  411.   Add INDIRIZZO,4
  412.   LUNGHEZZABANCO=Max(LUNGHEZZABANCO,LUNGHEZZADATI)
  413.   Reserve As Chip Work BANCO,LUNGHEZZABANCO
  414.   Copy INDIRIZZO,INDIRIZZO+LUNGHEZZABANCO-1 To Start(BANCO)
  415.  Else 
  416.   Proc TIC[FILE$+Str$(Length(BANCODIIO))+" Byte",ULTIMALINEA-1]
  417.   Proc TIC["� un IFF anomalo, non posso caricarlo!",ULTIMALINEA]
  418.   Wait 200
  419.   NOMEFILE$=""
  420.  End If 
  421. Else 
  422.  LUNGHEZZABANCO=Length(BANCODIIO)
  423.  Reserve As Chip Work BANCO,LUNGHEZZABANCO
  424.  Copy Start(BANCODIIO),Start(BANCODIIO)+LUNGHEZZABANCO-1 To Start(BANCO)
  425.  FREQUENZA=8363
  426.  ANNOTAZIONI$=""
  427. End If 
  428. Erase BANCODIIO
  429. End Proc
  430. Procedure CARICAUNFILE
  431. Sam Loop Off : Sam Stop : CICLO=False
  432. FILE$=Fsel$("**","","Carica un campione audio","Premi Esc per uscire")
  433. If Exist(FILE$)
  434.  Open In 1,FILE$
  435.  LUNGHEZZABANCO=Max(Lof(1),512)
  436.  Close 1
  437.  MEMORIA=Chip Free+Fast Free
  438.  If LUNGHEZZABANCO>MEMORIA
  439.   Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  440.   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  441.   SENZAMEMORIA=True
  442.  Else 
  443.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  444.   Bload FILE$,Start(BANCODIIO)
  445.   SEPARATORE=Instr(FILE$,":") : POSIZIONE=1
  446.   For A=1 To Len(FILE$)
  447.    If Instr(FILE$,"/",POSIZIONE)>0
  448.     SEPARATORECASSETTO=Instr(FILE$,"/",POSIZIONE)
  449.     POSIZIONE=SEPARATORECASSETTO+1
  450.    End If 
  451.   Next A
  452.   SEPARATORE=Max(SEPARATORE,SEPARATORECASSETTO)
  453.   PERCORSO$=Left$(FILE$,SEPARATORE)
  454.   If Right$(PERCORSO$,1)="/"
  455.    PERCORSO$=Left$(PERCORSO$,Len(PERCORSO$)-1)
  456.   End If 
  457.   NOMEFILE$=Right$(FILE$,Len(FILE$)-SEPARATORE)
  458.   SENZAMEMORIA=False
  459.  End If 
  460. End If 
  461. End Proc
  462. Procedure CERCALOZERO[POSIZIONE,AVANTI]
  463. If AVANTI=True
  464.  Repeat 
  465.   Inc POSIZIONE
  466.   DATO=Peek(POSIZIONE)
  467.  Until DATO=0
  468. Else 
  469.  Repeat 
  470.   Dec POSIZIONE
  471.   DATO=Peek(POSIZIONE)
  472.  Until DATO=0
  473. End If 
  474. End Proc[POSIZIONE]
  475. Procedure CICLO
  476. If CICLO=True
  477.  Sam Loop On 
  478.  If GENERACAMPIONE=True
  479.   Inverse On : Print At(12,8);"Ciclo" : Inverse Off 
  480.  Else 
  481.   Inverse On : Print At(6,ULTIMALINEA-3);"Ciclo" : Inverse Off 
  482.  End If 
  483. Else 
  484.  Sam Loop Off 
  485.  If GENERACAMPIONE=True
  486.   Print At(12,8);"Ciclo"
  487.  Else 
  488.   Print At(6,ULTIMALINEA-3);"Ciclo"
  489.  End If 
  490. End If 
  491. End Proc
  492. Procedure CONDIZIONEINIZIALE
  493. INIZIO=True
  494. NUOVOINIZIOCAMPIONE=Start(BANCO)
  495. NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
  496. LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  497. LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  498. NUOVAFREQUENZA=FREQUENZA
  499. Cls 
  500. Proc MOSTRACAMPIONE
  501. POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  502. Proc INGRANDISCI
  503. Proc SETTALEZONE
  504. Proc MESSAGGI
  505. Proc CICLO
  506. Proc FILTRO
  507. Proc FREQUENZA
  508. ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  509. Proc MOSTRALAZONAATTIVA
  510. Print At(0,ULTIMALINEA-4);"Sorgente>";ANNOTAZIONI$
  511. End Proc
  512. Procedure FILTRO
  513. If FILTRO=True
  514.  Led On 
  515.  If GENERACAMPIONE=True
  516.   Inverse On : Print At(18,8);"Filtro" : Inverse Off 
  517.  Else 
  518.   Inverse On : Print At(12,ULTIMALINEA-3);"Filtro" : Inverse Off 
  519.  End If 
  520. Else 
  521.  Led Off 
  522.  If GENERACAMPIONE=True
  523.   Print At(18,8);"Filtro"
  524.  Else 
  525.   Print At(12,ULTIMALINEA-3);"Filtro"
  526.  End If 
  527. End If 
  528. End Proc
  529. Procedure FREQUENZA
  530. If GENERACAMPIONE=True
  531.  Print At(39,8);Str$(NUOVAFREQUENZA)-" ";
  532. Else 
  533.  Print At(14,ULTIMALINEA-5);Str$(NUOVAFREQUENZA)-" ";
  534. End If 
  535. Print " Hertz "
  536. End Proc
  537. Procedure GENERACAMPIONE
  538. Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
  539. NOMEFILE$="Sintetico"
  540. GENERACAMPIONE=True
  541. Cls 
  542. Proc TIC["Indica la lunghezza in multipli di 512 Byte (01-16)",ULTIMALINEA]
  543. RISPOSTA$=Input$(2) : RISPOSTA=Val(RISPOSTA$)
  544. Proc LIMITI[RISPOSTA,1,16] : RISPOSTA=Param
  545. LUNGHEZZASINTETICO=512*RISPOSTA
  546. Reserve Zone 21
  547. Ink 2 : Draw 0,31 To 511,31 : Draw 0,103 To 511,103 : Ink 1
  548. Set Zone 1,0,0 To 511,63
  549. Print At(0,8);Zone$("Suona",2)
  550. Print At(6,8);Zone$("Ferma",3)
  551. Print At(12,8);Zone$("Ciclo",4)
  552. Print At(18,8);Zone$("Filtro",5)
  553. Set Zone 6,0,72 To 511,135
  554. Print At(0,18);Zone$("Suona",7)
  555. Print At(6,18);"Forme d'onda:"
  556. Print At(6,19);Zone$("Sinusoidale",8)
  557. Print At(6,20);Zone$("Triangolare",9)
  558. Print At(6,21);Zone$("Dente di sega",10)
  559. Print At(6,22);Zone$("Quadra",11)
  560. Print At(6,23);Zone$("Disegno",12)
  561. Print At(20,18);"Operazioni:"
  562. Print At(20,19);Zone$("Somma",13)
  563. Print At(20,20);Zone$("Sottrai",14)
  564. Print At(20,21);Zone$("Inverti",15)
  565. Print At(20,22);Zone$("Rovescia",16)
  566. Print At(76,17); Using "####";1
  567. Hslider 0,136 To 607,143,128,0,1
  568. Set Zone 17,0,136 To 607,143
  569. Print At(25,8);Zone$("Frequenza",18);
  570. Print Zone$(Chr$(147)+Chr$(148),19);
  571. Print Zone$(Chr$(149)+Chr$(150),20);
  572. Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
  573. Print At(20,23);Zone$("Progressione",21)
  574. Proc CICLO
  575. Proc FILTRO
  576. Reserve As Chip Work BANCO,LUNGHEZZASINTETICO
  577. Reserve As Chip Work BANCODIIO,LUNGHEZZASINTETICO
  578. FREQUENZAMASSIMA=LUNGHEZZASINTETICO/4
  579. LUNGHEZZA$=Str$(LUNGHEZZASINTETICO)+" Byte"
  580. Print At(80-Len(LUNGHEZZA$),8);LUNGHEZZA$
  581. Proc TIC["Premi Esc per uscire",ULTIMALINEA]
  582. Repeat 
  583.  Repeat 
  584.   TASTOPREMUTO$=Inkey$
  585.   TASTODELTOPOPREMUTO=Mouse Key
  586.   ZONATOPO=Mouse Zone
  587.   If TASTODELTOPOPREMUTO=1
  588.    If DENTROZONA=False
  589.     If ZONATOPO=2
  590.      Inverse On : Print At(0,8);"Suona"
  591.      Sam Raw 1,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
  592.      Sam Raw 2,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
  593.     End If 
  594.      If ZONATOPO=3
  595.       Inverse On : Print At(6,8);"Ferma"
  596.       Sam Stop 
  597.      End If 
  598.      If ZONATOPO=4
  599.       CICLO= Not CICLO : Proc CICLO
  600.      End If 
  601.      If ZONATOPO=5
  602.       FILTRO= Not FILTRO : Proc FILTRO
  603.      End If 
  604.     If ZONATOPO=7
  605.      Inverse On : Print At(0,18);"Suona"
  606.      Sam Raw 4,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
  607.      Sam Raw 8,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
  608.     End If 
  609.     If ZONATOPO=8
  610.      Inverse On : Print At(6,19);"Sinusoidale"
  611.      Cls 0,0,72 To 639+1,135+1
  612.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  613.      UNITA#=2*Pi#/LUNGHEZZASINTETICO
  614.      For X=0 To LUNGHEZZASINTETICO-1
  615.       DATO=Sin(UNITA#*X)*127
  616.       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  617.       If DATO<0
  618.        Add DATO,256
  619.       End If 
  620.       INDIRIZZO=Start(BANCODIIO)+X
  621.       Poke INDIRIZZO,DATO
  622.      Next X
  623.      Proc MULTIPLO
  624.     End If 
  625.     If ZONATOPO=9
  626.      Inverse On : Print At(6,20);"Triangolare"
  627.      Cls 0,0,72 To 639+1,135+1
  628.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  629.      For X=0 To LUNGHEZZASINTETICO-1
  630.       If X<LUNGHEZZASINTETICO/4
  631.        DATO=(X*512)/LUNGHEZZASINTETICO
  632.       End If 
  633.       If X>LUNGHEZZASINTETICO/4-1 and X<LUNGHEZZASINTETICO/4*3
  634.        DATO=((LUNGHEZZASINTETICO/2-X)*512)/LUNGHEZZASINTETICO-1
  635.       End If 
  636.       If X>LUNGHEZZASINTETICO/4*3-1
  637.        DATO=((X-LUNGHEZZASINTETICO)*512)/LUNGHEZZASINTETICO
  638.       End If 
  639.       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  640.       If DATO<0
  641.        Add DATO,256
  642.       End If 
  643.       INDIRIZZO=Start(BANCODIIO)+X
  644.       Poke INDIRIZZO,DATO
  645.      Next X
  646.      Proc MULTIPLO
  647.     End If 
  648.     If ZONATOPO=10
  649.      Inverse On : Print At(6,21);"Dente di sega"
  650.      Cls 0,0,72 To 639+1,135+1
  651.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  652.      For X=0 To LUNGHEZZASINTETICO-1
  653.       DATO=((X/2-LUNGHEZZASINTETICO/4)*512)/LUNGHEZZASINTETICO
  654.       Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  655.       If DATO<0
  656.        Add DATO,256
  657.       End If 
  658.       INDIRIZZO=Start(BANCODIIO)+X
  659.       Poke INDIRIZZO,DATO
  660.      Next X
  661.      Proc MULTIPLO
  662.     End If 
  663.     If ZONATOPO=11
  664.      Inverse On : Print At(6,22);"Quadra"
  665.      Cls 0,0,72 To 639+1,135+1
  666.      Ink 2 : Draw 0,103 To 511,103 : Ink 1 : Gr Locate 0,103
  667.      For X=0 To LUNGHEZZASINTETICO-1
  668.       If X<LUNGHEZZASINTETICO/2
  669.        DATO=127
  670.       Else 
  671.        DATO=-128
  672.       End If 
  673.       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  674.       If DATO<0
  675.        Add DATO,256
  676.       End If 
  677.       INDIRIZZO=Start(BANCODIIO)+X
  678.       Poke INDIRIZZO,DATO
  679.      Next X
  680.      Proc MULTIPLO
  681.     End If 
  682.     If ZONATOPO=12
  683.      Inverse On : Print At(6,23);"Disegno"
  684.      Proc TIC["Premi il tasto destro del mouse per finire",ULTIMALINEA]
  685.      Repeat 
  686.       TASTODELTOPOPREMUTO=Mouse Key
  687.       ZONATOPO=Mouse Zone
  688.       If TASTODELTOPOPREMUTO=1 and ZONATOPO=6
  689.        XTOPO=X Screen(X Mouse) : YTOPO=Y Screen(Y Mouse)
  690.        Ink 0 : Box XTOPO,72 To XTOPO+1,135
  691.        Ink 2 : Draw XTOPO,103 To XTOPO+1,103
  692.        Ink 1 : Draw XTOPO,YTOPO To XTOPO+1,YTOPO
  693.        DATO=(103-YTOPO)*4
  694.        If DATO<0
  695.         Add DATO,256
  696.        End If 
  697.        INDIRIZZO=Start(BANCODIIO)+XTOPO*LUNGHEZZASINTETICO/512
  698.        For A=0 To LUNGHEZZASINTETICO/512
  699.         Poke INDIRIZZO+A,DATO
  700.        Next A
  701.       End If 
  702.      Until TASTODELTOPOPREMUTO=2
  703.      Cls 0,0,72 To 639+1,135+1
  704.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  705.      Gr Locate 0,103
  706.      For X=0 To LUNGHEZZASINTETICO-1 Step LUNGHEZZASINTETICO/512
  707.       DATO=Peek(Start(BANCODIIO)+X)
  708.       If DATO>127
  709.        Add DATO,-256
  710.       End If 
  711.       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  712.      Next X
  713.      NUOVOMESSAGGIO=True
  714.     End If 
  715.     If ZONATOPO=13
  716.      Inverse On : Print At(20,19);"Somma"
  717.      Proc SOMMA
  718.      Proc MOSTRASINTETICO
  719.     End If 
  720.     If ZONATOPO=14
  721.      Inverse On : Print At(20,20);"Sottrai"
  722.      For X=0 To LUNGHEZZASINTETICO-1
  723.       DATO=Peek(Start(BANCODIIO)+X)
  724.       If DATO>127
  725.        Add DATO,-256
  726.       End If 
  727.       Add F0RMADONDA(X),-DATO
  728.      Next X
  729.      Proc MOSTRASINTETICO
  730.     End If 
  731.     If ZONATOPO=15
  732.      Inverse On : Print At(20,21);"Inverti"
  733.      Cls 0,0,72 To 639+1,135+1
  734.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  735.      Gr Locate 0,103
  736.      For X=0 To LUNGHEZZASINTETICO-1
  737.       DATO=Peek(Start(BANCODIIO)+X)
  738.       If DATO>127
  739.        Add DATO,-256
  740.       End If 
  741.       DATO= Not DATO
  742.       Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  743.       If DATO<0
  744.        Add DATO,256
  745.       End If 
  746.       INDIRIZZO=Start(BANCODIIO)+X
  747.       Poke INDIRIZZO,DATO
  748.      Next X
  749.     End If 
  750.     If ZONATOPO=16
  751.      Inverse On : Print At(20,22);"Rovescia"
  752.      Cls 0,0,72 To 639+1,135+1
  753.      Ink 2 : Draw 0,103 To 511,103 : Ink 1
  754.      Reserve As Work BANCO3,LUNGHEZZASINTETICO
  755.      For X=0 To LUNGHEZZASINTETICO-1
  756.       DATO=Peek(Start(BANCODIIO)+X)
  757.       INDIRIZZO=Start(BANCO3)+LUNGHEZZASINTETICO-1-X
  758.       Poke INDIRIZZO,DATO
  759.       If DATO>127
  760.        Add DATO,-256
  761.       End If 
  762.       Polyline To((LUNGHEZZASINTETICO-1-X)*512)/LUNGHEZZASINTETICO,103-DATO/4
  763.      Next X
  764.      Copy Start(BANCO3),Start(BANCO3)+Length(BANCO3)-1 To Start(BANCODIIO)
  765.      Erase BANCO3
  766.     End If 
  767.     If ZONATOPO=18
  768.      Inverse On : Print At(25,8);"Frequenza"
  769.      Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  770.      NUOVAFREQUENZA=FREQUENZA
  771.      Proc FREQUENZA
  772.      NUOVOMESSAGGIO=True
  773.     End If 
  774.     If ZONATOPO=19
  775.      Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
  776.      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  777.      Inc NUOVAFREQUENZA
  778.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  779.      Proc FREQUENZA
  780.      NUOVOMESSAGGIO=True
  781.     End If 
  782.     If ZONATOPO=20
  783.      Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
  784.      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  785.      Dec NUOVAFREQUENZA
  786.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  787.      Proc FREQUENZA
  788.      NUOVOMESSAGGIO=True
  789.     End If 
  790.     If ZONATOPO=21
  791.      Inverse On : Print At(20,23);"Progressione"
  792.      Proc TIC["Progressione aritmetica o geometrica (a/g) Esc->Esci ?",ULTIMALINEA]
  793.      RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  794.      If RISPOSTA$<>Chr$(27)
  795.       If RISPOSTA$="a"
  796.        PROGRESSIONE$="Aritmetica"
  797.       End If 
  798.       If RISPOSTA$="g"
  799.        PROGRESSIONE$="Geometrica"
  800.       End If 
  801.       If PROGRESSIONE$<>""
  802.        Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255
  803.        Input "Inizio della progressione (1-"+Str$(FREQUENZAMASSIMA)-" "+") ?";RISPOSTA$;
  804.        If RISPOSTA$<>""
  805.         PRIMOTERMINE=Val(RISPOSTA$)
  806.         Proc LIMITI[PRIMOTERMINE,1,FREQUENZAMASSIMA] : PRIMOTERMINE=Param
  807.         Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255
  808.         Input "Fine della progressione (1-"+Str$(FREQUENZAMASSIMA)-" "+") ?";RISPOSTA$;
  809.         If RISPOSTA$<>""
  810.          ULTIMOTERMINE=Val(RISPOSTA$)
  811.          Proc LIMITI[ULTIMOTERMINE,1,FREQUENZAMASSIMA] : ULTIMOTERMINE=Param
  812.          Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255
  813.          Input "Numero di valori intermedi (1-126) ?";RISPOSTA; : Curs Off 
  814.          If RISPOSTA$<>""
  815.           VLORIINTERMEDI=Val(RISPOSTA$) : VLORITOTALI=VLORIINTERMEDI+2
  816.           Proc LIMITI[VLORITOTALI,3,128] : VLORITOTALI=Param
  817.          End If 
  818.          If PROGRESSIONE$="Aritmetica"
  819.           RAGIONE#=(ULTIMOTERMINE-PRIMOTERMINE)/(VLORITOTALI-1*1.0)
  820.           For A=1 To VLORITOTALI
  821.            If A=VLORITOTALI
  822.             MULTIPLO#=ULTIMOTERMINE
  823.            Else 
  824.             MULTIPLO#=RAGIONE#*(A-1)+PRIMOTERMINE
  825.            End If 
  826.            Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
  827.            Proc MULTIPLO
  828.            Cls 0,0,72 To 639+1,135+1
  829.            Ink 2 : Draw 0,103 To 511,103 : Ink 1
  830.            Proc SOMMA
  831.           Next A
  832.           For A=0 To LUNGHEZZASINTETICO Step 4
  833.            Loke Start(BANCODIIO)+A,0
  834.           Next A
  835.           Proc MOSTRASINTETICO
  836.          End If 
  837.          If PROGRESSIONE$="Geometrica"
  838.           RAGIONE#=(ULTIMOTERMINE/PRIMOTERMINE)^(1.0/(VLORITOTALI-1))
  839.           For A=1 To VLORITOTALI
  840.            If A=VLORITOTALI
  841.             MULTIPLO#=ULTIMOTERMINE
  842.            Else 
  843.             MULTIPLO#=RAGIONE#^(A-1)*PRIMOTERMINE
  844.            End If 
  845.            Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
  846.            Proc MULTIPLO
  847.            Cls 0,0,72 To 639+1,135+1
  848.            Ink 2 : Draw 0,103 To 511,103 : Ink 1
  849.            Proc SOMMA
  850.           Next A
  851.           Proc MOSTRASINTETICO
  852.          End If 
  853.         End If 
  854.        End If 
  855.       End If 
  856.      End If 
  857.      PROGRESSIONE$=""
  858.      NUOVOMESSAGGIO=True
  859.     End If 
  860.     DENTROZONA=True
  861.    End If 
  862.    If ZONATOPO=17
  863.     MULTIPLO#=X Screen(X Mouse)/(607.0/FREQUENZAMASSIMA)
  864.     Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#,1 : Wait Vbl 
  865.     MULTIPLO#=MULTIPLO#+1 : Print At(76,17); Using "####";MULTIPLO#
  866.    End If 
  867.   Else If TASTODELTOPOPREMUTO=2
  868.    If ZONATOPO=19
  869.     Inverse On 
  870.     Print At(34,8);Chr$(147)+Chr$(148)
  871.     Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
  872.     Inc NUOVAFREQUENZA
  873.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  874.     Proc FREQUENZA
  875.     NUOVOMESSAGGIO=True
  876.    End If 
  877.    If ZONATOPO=20
  878.     Inverse On 
  879.     Print At(36,8);Chr$(149)+Chr$(150)
  880.     Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
  881.     Dec NUOVAFREQUENZA
  882.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  883.     Proc FREQUENZA
  884.     NUOVOMESSAGGIO=True
  885.    End If 
  886.   Else 
  887.    Inverse Off 
  888.    Print At(0,8);"Suona"
  889.    Print At(6,8);"Ferma"
  890.    Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  891.    Print At(0,18);"Suona"
  892.    Print At(6,19);"Sinusoidale"
  893.    Print At(6,20);"Triangolare"
  894.    Print At(6,21);"Dente di sega"
  895.    Print At(6,22);"Quadra"
  896.    Print At(6,23);"Disegno"
  897.    Print At(20,19);"Somma"
  898.    Print At(20,20);"Sottrai"
  899.    Print At(20,21);"Inverti"
  900.    Print At(20,22);"Rovescia"
  901.    Print At(20,23);"Progressione"
  902.    If NUOVOMESSAGGIO=True
  903.     Proc TIC["Premi Esc per uscire",ULTIMALINEA]
  904.     NUOVOMESSAGGIO=False
  905.    End If 
  906.    DENTROZONA=False
  907.   End If 
  908.  Until TASTOPREMUTO$<>""
  909. Until TASTOPREMUTO$=Chr$(27)
  910. Erase BANCODIIO
  911. Proc AZZERAFORMADONDA
  912. End Proc
  913. Procedure INGRANDISCI
  914. Cls 0,0,72 To 639+1,72+ALTEZZA+1
  915. Ink 2 : Draw 0,72+ZERO To 639,72+ZERO : Ink 1
  916. Clip 0,72 To 639,72+ALTEZZA
  917. Gr Locate 0,72+ZERO
  918. For X=0 To 639
  919.  POSIZIONE=POSIZIONEINGRANDIMENTO+X
  920.  DATO=Peek(POSIZIONE)
  921.  If DATO>127
  922.   Add DATO,-256
  923.  End If 
  924.  If POSIZIONE>=Start(BANCO) and POSIZIONE<=Start(BANCO)+Length(BANCO)-1
  925.   If POSIZIONE=Start(BANCO)+Length(BANCO)-1
  926.    Polyline X,72+ZERO-DATO To X,72+ZERO
  927.   Else 
  928.    Polyline To X,72+ZERO-DATO : Y=Ygr
  929.   End If 
  930.  Else 
  931.   Gr Locate X+1,72+ZERO
  932.  End If 
  933.  If POSIZIONE=NUOVOINIZIOCAMPIONE
  934.   Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
  935.   Gr Writing 1 : Gr Locate X,Y
  936.  End If 
  937.  If POSIZIONE=NUOVAFINECAMPIONE
  938.   Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
  939.   Draw X+3,72 To X+7,72
  940.   Draw X+3,74 To X+7,74
  941.   Draw X+3,72 To X+3,76
  942.   Gr Writing 1 : Gr Locate X,Y
  943.  End If 
  944. Next X
  945. Clip 
  946. End Proc
  947. Procedure INIZIO
  948. If INIZIO=True
  949.  Inverse On : Print At(39,ULTIMALINEA-2);"Inizio" : Inverse Off 
  950.  Print At(46,ULTIMALINEA-2);"Fine"
  951. Else 
  952.  Print At(39,ULTIMALINEA-2);"Inizio"
  953.  Inverse On : Print At(46,ULTIMALINEA-2);"Fine" : Inverse Off 
  954. End If 
  955. End Proc
  956. Procedure LIMITI[NUMERO,LIMITEMINIMO,LIMITEMASSIMO]
  957. '-> Limiti by Stefano Regattin 
  958. 'i> 19 maggio 1996 
  959. 'm> 12 giugno 1996 
  960. '--------------------------------------------------------
  961. 'La procedura equivale alle seguenti linee di programma: 
  962. ' If NUMERO<LIMITEMINIMO Then NUMERO=LIMITEMINIMO
  963. ' If NUMERO>LIMITEMASSIMO Then NUMERO=LIMITEMASSIMO
  964. 'Se LIMITEMINIMO ï¿½ maggiore di LIMITEMASSIMO ne scambia i valori 
  965. '----------------------------------------------------------------  
  966. If LIMITEMINIMO>LIMITEMASSIMO Then Swap LIMITEMINIMO,LIMITEMASSIMO
  967. NUMERO=Max(Min(NUMERO,LIMITEMASSIMO),LIMITEMINIMO)
  968. End Proc[NUMERO]
  969. Procedure LINEE
  970. NUOVOINIZIOCAMPIONE=Min(NUOVOINIZIOCAMPIONE,NUOVAFINECAMPIONE-511)
  971. If NUOVOINIZIOCAMPIONE<INIZIOCAMPIONE
  972.  NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE
  973.  NUOVAFINECAMPIONE=NUOVOINIZIOCAMPIONE+511
  974. End If 
  975. NUOVAFINECAMPIONE=Max(NUOVAFINECAMPIONE,NUOVOINIZIOCAMPIONE+511)
  976. Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  977. XLINEAINIZIOCAMPIONE=(NUOVOINIZIOCAMPIONE-INIZIOCAMPIONE)/PASSO
  978. Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  979. Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
  980. XLINEAFINECAMPIONE=(NUOVAFINECAMPIONE-INIZIOCAMPIONE)/PASSO
  981. Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
  982. Inverse Off : Print At(0,8);"Inizio>Byte";NUOVOINIZIOCAMPIONE-Start(BANCO);
  983. Print " Fine>Byte";NUOVAFINECAMPIONE-Start(BANCO);
  984. LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  985. LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  986. Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
  987. End Proc
  988. Procedure MESSAGGI
  989. Proc TIC[NOMEFILE$+Str$(Length(BANCO))+" Byte",ULTIMALINEA-1]
  990. Proc TIC[Chr$(147)+Chr$(148)+" "+Chr$(149)+Chr$(150)+" zona attiva "+Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento Esc Esci",ULTIMALINEA]
  991. End Proc
  992. Procedure MISCELATIMBRI
  993. Sam Loop Off : Sam Stop : CICLO=False
  994. Cls 
  995. FILE$=Fsel$("**","","Carica il primo campione audio","Premi Esc per uscire")
  996. If Exist(FILE$)
  997.  Open In 1,FILE$
  998.  LUNGHEZZABANCO=Max(Lof(1),512)
  999.  Close 1
  1000.  MEMORIA=Chip Free+Fast Free
  1001.  If LUNGHEZZABANCO>MEMORIA
  1002.   Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  1003.   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  1004.   SENZAMEMORIA=True
  1005.  Else 
  1006.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1007.   Bload FILE$,Start(BANCODIIO)
  1008.   SENZAMEMORIA=False
  1009.   Proc CARICARAWOIFF
  1010.   LUNGHEZZABANCO1=LUNGHEZZABANCO
  1011.   Reserve As Chip Work BANCO3,LUNGHEZZABANCO1
  1012.   Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCO3)
  1013.  End If 
  1014. End If 
  1015. FILE$=Fsel$("**","","Carica il secondo campione audio","Premi Esc per uscire")
  1016. If Exist(FILE$)
  1017.  Open In 1,FILE$
  1018.  LUNGHEZZABANCO=Max(Lof(1),512)
  1019.  Close 1
  1020.  MEMORIA=Chip Free+Fast Free
  1021.  If LUNGHEZZABANCO>MEMORIA
  1022.   Proc TIC["Non c'� memoria sufficiente per caricare il file",ULTIMALINEA-1]
  1023.   Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  1024.   SENZAMEMORIA=True
  1025.  Else 
  1026.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1027.   Bload FILE$,Start(BANCODIIO)
  1028.   SENZAMEMORIA=False
  1029.   Proc CARICARAWOIFF
  1030.   LUNGHEZZABANCO2=LUNGHEZZABANCO
  1031.   Reserve As Chip Work BANCODIIO,LUNGHEZZABANCO2
  1032.   Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCODIIO)
  1033.  End If 
  1034. End If 
  1035. LUNGHEZZABANCO=Max(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1036. If LUNGHEZZABANCO1=0 or LUNGHEZZABANCO2=0
  1037.  Proc TIC["Devi scegliere due campioni audio!",ULTIMALINEA]
  1038.  Wait 200 : Pop Proc
  1039. End If 
  1040. If SENZAMEMORIA=True Then Pop Proc
  1041. Reserve As Chip Work BANCO,LUNGHEZZABANCO
  1042. GENERACAMPIONE=True
  1043. Reserve Zone 8
  1044. MOSTRACAMPIONEPERMISCELAZIONE[BANCO3,0]
  1045. MOSTRACAMPIONEPERMISCELAZIONE[BANCODIIO,72]
  1046. Print At(0,8);Zone$("Suona",1)
  1047. Print At(6,8);Zone$("Ferma",2)
  1048. Print At(12,8);Zone$("Ciclo",3)
  1049. Print At(51,8);"Lunghezza>";Str$(Length(BANCO3))-" ";" Byte"
  1050. Print At(18,8);Zone$("Filtro",4)
  1051. Print At(0,17);Zone$("Suona",5)
  1052. Print At(6,17);"Lunghezza>";Str$(Length(BANCODIIO))-" ";" Byte"
  1053. Print At(25,8);Zone$("Frequenza",6);
  1054. Print Zone$(Chr$(147)+Chr$(148),7);
  1055. Print Zone$(Chr$(149)+Chr$(150),8);
  1056. Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
  1057. Proc CICLO
  1058. Proc FILTRO
  1059. Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
  1060. Repeat 
  1061.  Repeat 
  1062.   TASTOPREMUTO$=Inkey$
  1063.   TASTODELTOPOPREMUTO=Mouse Key
  1064.   ZONATOPO=Mouse Zone
  1065.   If TASTODELTOPOPREMUTO=1
  1066.    If DENTROZONA=False
  1067.     If ZONATOPO=1
  1068.      Inverse On : Print At(0,8);"Suona"
  1069.      Sam Raw 1,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
  1070.      Sam Raw 2,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
  1071.     End If 
  1072.      If ZONATOPO=2
  1073.       Inverse On : Print At(6,8);"Ferma"
  1074.       Sam Stop 
  1075.      End If 
  1076.      If ZONATOPO=3
  1077.       CICLO= Not CICLO : Proc CICLO
  1078.      End If 
  1079.      If ZONATOPO=4
  1080.       FILTRO= Not FILTRO : Proc FILTRO
  1081.      End If 
  1082.     If ZONATOPO=5
  1083.      Inverse On : Print At(0,17);"Suona"
  1084.      Sam Raw 4,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
  1085.      Sam Raw 8,Start(BANCODIIO),Length(BANCODIIO),NUOVAFREQUENZA
  1086.     End If 
  1087.     If ZONATOPO=6
  1088.      Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  1089.      NUOVAFREQUENZA=FREQUENZA
  1090.      Proc FREQUENZA
  1091.      NUOVOMESSAGGIO=True
  1092.     End If 
  1093.     If ZONATOPO=7
  1094.      Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
  1095.      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  1096.      Inc NUOVAFREQUENZA
  1097.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1098.      Proc FREQUENZA
  1099.      NUOVOMESSAGGIO=True
  1100.     End If 
  1101.     If ZONATOPO=8
  1102.      Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
  1103.      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  1104.      Dec NUOVAFREQUENZA
  1105.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1106.      Proc FREQUENZA
  1107.      NUOVOMESSAGGIO=True
  1108.     End If 
  1109.     DENTROZONA=True
  1110.    End If 
  1111.   Else If TASTODELTOPOPREMUTO=2
  1112.    If ZONATOPO=7
  1113.     Inverse On 
  1114.     Print At(34,8);Chr$(147)+Chr$(148)
  1115.     Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
  1116.     Inc NUOVAFREQUENZA
  1117.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1118.     Proc FREQUENZA
  1119.     NUOVOMESSAGGIO=True
  1120.    End If 
  1121.    If ZONATOPO=8
  1122.     Inverse On 
  1123.     Print At(36,8);Chr$(149)+Chr$(150)
  1124.     Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
  1125.     Dec NUOVAFREQUENZA
  1126.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1127.     Proc FREQUENZA
  1128.     NUOVOMESSAGGIO=True
  1129.    End If 
  1130.   Else 
  1131.    Inverse Off 
  1132.    Print At(0,8);"Suona"
  1133.    Print At(6,8);"Ferma"
  1134.    Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  1135.    Print At(0,17);"Suona"
  1136.    If NUOVOMESSAGGIO=True
  1137.     Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
  1138.     NUOVOMESSAGGIO=False
  1139.    End If 
  1140.    DENTROZONA=False
  1141.   End If 
  1142.  Until TASTOPREMUTO$<>""
  1143.  If TASTOPREMUTO$=Chr$(27) Then Pop Proc
  1144. Until TASTOPREMUTO$=" "
  1145. If LUNGHEZZABANCO1>LUNGHEZZABANCO2
  1146.  SCELTA=1
  1147. Else If LUNGHEZZABANCO1=LUNGHEZZABANCO2
  1148.  Repeat 
  1149.   Proc TIC["I 2 campioni sono lunghi uguale; quale scegli come campione di partenza (1/2) ?",ULTIMALINEA]
  1150.   SCELTA$=Input$(1) : SCELTA=Val(SCELTA$)
  1151.  Until SCELTA=1 or SCELTA=2
  1152. Else 
  1153.  SCELTA=2
  1154. End If 
  1155. Proc TIC["Sto miscelando i due campioni...",ULTIMALINEA]
  1156. If SCELTA=1
  1157.  Copy Start(BANCO3),Start(BANCO3)+LUNGHEZZABANCO1-1 To Start(BANCO)
  1158. Else 
  1159.  Copy Start(BANCODIIO),Start(BANCODIIO)+LUNGHEZZABANCO2-1 To Start(BANCO)
  1160. End If 
  1161. LUNGHEZZAMISCELAZIONE=Min(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1162. For INDIRIZZO=0 To LUNGHEZZAMISCELAZIONE-1
  1163.  VLOREPERCENTUALE=(INDIRIZZO*100)/LUNGHEZZAMISCELAZIONE
  1164.  If SCELTA=1
  1165.   DATO1=(Peek(Start(BANCO3)+INDIRIZZO)*VLOREPERCENTUALE)/100
  1166.   DATO2=(Peek(Start(BANCODIIO)+INDIRIZZO)*(100-VLOREPERCENTUALE))/100
  1167.  Else 
  1168.   DATO1=(Peek(Start(BANCO3)+INDIRIZZO)*(100-VLOREPERCENTUALE))/100
  1169.   DATO2=(Peek(Start(BANCODIIO)+INDIRIZZO)*VLOREPERCENTUALE)/100
  1170.  End If 
  1171.  If DATO1>127
  1172.   Add DATO1,-256
  1173.  End If 
  1174.  If DATO2>127
  1175.   Add DATO2,-256
  1176.  End If 
  1177.  DATOMISCELAZIONE=(DATO1+DATO2)/2
  1178.   If DATOMISCELAZIONE<0
  1179.   Add DATOMISCELAZIONE,256
  1180.  End If 
  1181.  Poke Start(BANCO)+INDIRIZZO,DATOMISCELAZIONE
  1182. Next INDIRIZZO
  1183. ANNOTAZIONI$="SamplesMaster by Stefano Regattin"
  1184. End Proc
  1185. Procedure MOSTRACAMPIONE
  1186. INIZIOCAMPIONE=NUOVOINIZIOCAMPIONE : FINECAMPIONE=NUOVAFINECAMPIONE
  1187. PASSO=(FINECAMPIONE-INIZIOCAMPIONE+1)/640+1 : PASSO=Max(PASSO,1)
  1188. Cls 0,0,0 To 639+1,63+1 : Ink 2 : Draw 0,31 To 639,31 : Gr Locate 0,31 : Ink 1
  1189. For INDIRIZZO=INIZIOCAMPIONE To FINECAMPIONE Step PASSO
  1190.  DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  1191.  Polyline To X,31-DATO/4 : Inc X
  1192. Next INDIRIZZO
  1193. XLINEAINIZIOCAMPIONE=0 : XLINEAFINECAMPIONE=X-1
  1194. Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1195. Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
  1196. Inverse Off : Print At(0,8);"Inizio>Byte";INIZIOCAMPIONE-Start(BANCO);
  1197. Print " Fine>Byte";FINECAMPIONE-Start(BANCO);
  1198. Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
  1199. DIVISIONESLIDERINGRANDIMENTO#=640.0/PASSO
  1200. End Proc
  1201. Procedure MOSTRACAMPIONEPERMISCELAZIONE[B,P]
  1202. IC=Start(B) : FC=Start(B)+Length(B)-1
  1203. PASSO=(FC-IC+1)/640+1 : PASSO=Max(PASSO,1)
  1204. Ink 2 : Draw 0,P+31 To 639,P+31 : Gr Locate 0,P+31 : Ink 1
  1205. For INDIRIZZO=IC To FC Step PASSO
  1206.  DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  1207.  Polyline To X,P+31-DATO/4 : Inc X
  1208. Next INDIRIZZO
  1209. End Proc
  1210. Procedure MOSTRASINTETICO
  1211. Shared LUNGHEZZASINTETICO
  1212. Cls 0,0,0 To 511+1,63+1
  1213. Ink 2 : Draw 0,31 To 511,31 : Ink 1
  1214. Gr Locate 0,31 : DIVISORE=1
  1215. For X=0 To LUNGHEZZASINTETICO-1
  1216.  DATO=F0RMADONDA(X)/DIVISORE
  1217.  If DATO>127 or DATO<-128
  1218.   Cls 0,0,0 To 511+1,63+1
  1219.   Ink 2 : Draw 0,31 To 511,31 : Ink 1
  1220.   Gr Locate 0,31 : Inc DIVISORE : X=-1
  1221.  End If 
  1222.  If X>-1
  1223.   Polyline To(X*512)/LUNGHEZZASINTETICO,31-DATO/4
  1224.   If DATO<0
  1225.    Add DATO,256
  1226.   End If 
  1227.   Poke Start(BANCO)+X,DATO
  1228.  End If 
  1229. Next X
  1230. End Proc
  1231. Procedure MOSTRALAZONAATTIVA
  1232. Print At(65,8);ZONAATTIVA$
  1233. End Proc
  1234. Procedure MULTIPLO
  1235. Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
  1236. If MULTIPLO#>1
  1237.  Reserve As Work BANCO3,LUNGHEZZASINTETICO
  1238.  Repeat 
  1239.   For X=0 To LUNGHEZZASINTETICO-1 Step MULTIPLO#
  1240.    DATO=Peek(Start(BANCODIIO)+X)
  1241.    INDIRIZZO=Start(BANCO3)+M
  1242.    Poke INDIRIZZO,DATO : Inc M : Exit If M=LUNGHEZZASINTETICO
  1243.   Next X
  1244.  Until M=LUNGHEZZASINTETICO
  1245.  Gr Locate 0,103
  1246.  For X=0 To LUNGHEZZASINTETICO-1
  1247.   DATO=Peek(Start(BANCO3)+X)
  1248.   INDIRIZZO=Start(BANCODIIO)+X
  1249.   Poke INDIRIZZO,DATO
  1250.   If DATO>127
  1251.    Add DATO,-256
  1252.   End If 
  1253.   Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  1254.  Next X
  1255.  Erase BANCO3
  1256.  Inverse Off 
  1257.  Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#-1,1
  1258.  Print At(76,17); Using "####";MULTIPLO#
  1259. End If 
  1260. End Proc
  1261. Procedure SALVAUNFILE
  1262. Sam Loop Off : Sam Stop : CICLO=False
  1263. FILE$=Fsel$("**",NOMEFILE$,"Salva un campione audio","Premi Esc per uscire")
  1264. If FILE$<>""
  1265.  TIC["Vuoi salvarlo come file IFF (s/n) ?",ULTIMALINEA]
  1266.  RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  1267.  If RISPOSTA$="s"
  1268.   Proc TIC["Sto salvando il campione audio IFF",ULTIMALINEA-1]
  1269.   Proc TIC[FILE$,ULTIMALINEA]
  1270.   LUNGHEZZANOME=Len(NOMEFILE$)/4*4
  1271.   RESTONOME=Len(NOMEFILE$) mod 4
  1272.   If RESTONOME>0
  1273.   Add LUNGHEZZANOME,4
  1274.   End If 
  1275.   LUNGHEZZAANNO=36
  1276.   LUNGHEZZABANCO=40+8+LUNGHEZZAANNO+8+LUNGHEZZACAMPIONE
  1277.   If NOMEFILE$<>""
  1278.    Add LUNGHEZZABANCO,8+LUNGHEZZANOME
  1279.   End If 
  1280.   Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1281.   INDIRIZZO=Start(BANCODIIO)
  1282.   Poke$ INDIRIZZO,"FORM"
  1283.   Add INDIRIZZO,4
  1284.   Loke INDIRIZZO,LUNGHEZZABANCO-8
  1285.   Add INDIRIZZO,4
  1286.   Poke$ INDIRIZZO,"8SVXVHDR"
  1287.   Add INDIRIZZO,8
  1288.   Loke INDIRIZZO,20
  1289.   Add INDIRIZZO,4
  1290.   Loke INDIRIZZO,0
  1291.   Add INDIRIZZO,4
  1292.   Loke INDIRIZZO,LUNGHEZZACAMPIONE
  1293.   Add INDIRIZZO,4
  1294.   Loke INDIRIZZO,0
  1295.   Add INDIRIZZO,4
  1296.   Doke INDIRIZZO,NUOVAFREQUENZA
  1297.   Add INDIRIZZO,2
  1298.   Doke INDIRIZZO,256
  1299.   Add INDIRIZZO,2
  1300.   Doke INDIRIZZO,256
  1301.   Add INDIRIZZO,2
  1302.   Doke INDIRIZZO,0
  1303.   Add INDIRIZZO,2
  1304.   If NOMEFILE$<>""
  1305.    Poke$ INDIRIZZO,"NAME"
  1306.    Add INDIRIZZO,4
  1307.    Loke INDIRIZZO,LUNGHEZZANOME
  1308.    Add INDIRIZZO,4
  1309.    Poke$ INDIRIZZO,NOMEFILE$
  1310.    Add INDIRIZZO,Len(NOMEFILE$)
  1311.    If RESTONOME>0
  1312.     ZERINELNOME=4-RESTONOME
  1313.     Inverse On 
  1314.     For A=1 To ZERINELNOME
  1315.      Poke INDIRIZZO,0
  1316.      Inc INDIRIZZO
  1317.     Next A
  1318.    End If 
  1319.   End If 
  1320.   Poke$ INDIRIZZO,"ANNO"
  1321.   Add INDIRIZZO,4
  1322.   Loke INDIRIZZO,LUNGHEZZAANNO
  1323.   Add INDIRIZZO,4
  1324.   Poke$ INDIRIZZO,"SamplesMaster by Stefano Regattin"+String$(Chr$(0),3)
  1325.   Add INDIRIZZO,LUNGHEZZAANNO
  1326.   Poke$ INDIRIZZO,"BODY"
  1327.   Add INDIRIZZO,4
  1328.   Loke INDIRIZZO,LUNGHEZZACAMPIONE
  1329.   Add INDIRIZZO,4
  1330.   Copy INIZIOCAMPIONE,FINECAMPIONE To INDIRIZZO
  1331.   Add INDIRIZZO,LUNGHEZZACAMPIONE
  1332.   If INDIRIZZO=Start(BANCODIIO)+Length(BANCODIIO)
  1333.    Proc TIC["Conversione campione audio da RAW ad IFF avvenuta",ULTIMALINEA]
  1334.   Else 
  1335.    Proc TIC["Conversione campione audio da RAW ad IFF fallita!",ULTIMALINEA]
  1336.    Erase BANCODIIO
  1337.    Wait 200
  1338.    Pop Proc
  1339.   End If 
  1340.   Bsave FILE$,Start(BANCODIIO) To Start(BANCODIIO)+Length(BANCODIIO)
  1341.   Erase BANCODIIO
  1342.  Else 
  1343.   Proc TIC["Sto salvando il campione audio RAW",ULTIMALINEA-1]
  1344.   Proc TIC[FILE$,ULTIMALINEA]
  1345.   Bsave FILE$,INIZIOCAMPIONE To FINECAMPIONE+1
  1346.  End If 
  1347.  Wait 200
  1348. End If 
  1349. End Proc
  1350. Procedure SETTALEZONE
  1351. Reserve Zone 21
  1352. Print At(0,ULTIMALINEA-3);Zone$("Suona",1)
  1353. Print At(0,ULTIMALINEA-2);Zone$("Ferma",2)
  1354. Print At(6,ULTIMALINEA-3);Zone$("Ciclo",3)
  1355. Print At(12,ULTIMALINEA-3);Zone$("Filtro",4)
  1356. Print At(21,ULTIMALINEA-3);"Mostra campione"
  1357. Print At(19,ULTIMALINEA-2);Zone$("Tutto",5)
  1358. Print At(26,ULTIMALINEA-2);Zone$("Tra le linee",6)
  1359. Print At(40,ULTIMALINEA-3);"Posizione"
  1360. Inverse On : Print At(39,ULTIMALINEA-2);Zone$("Inizio",7) : Inverse Off 
  1361. Print At(46,ULTIMALINEA-2);Zone$("Fine",8)
  1362. Print At(53,ULTIMALINEA-3);"Cerca lo zero"
  1363. Print At(51,ULTIMALINEA-2);Zone$("<Indietro",9)
  1364. Print At(61,ULTIMALINEA-2);Zone$("Avanti>",10)
  1365. Print At(69,ULTIMALINEA-3);Zone$("Carica",11)
  1366. Set Zone 12,0,72 To 639,72+ALTEZZA
  1367. Set Zone 13,0,0 To 639,63
  1368. Print At(6,ULTIMALINEA-2);Zone$("Genera",14)
  1369. Print At(69,ULTIMALINEA-2);Zone$("Salva",15)
  1370. Print At(76,ULTIMALINEA-2);Zone$("Esci",16)
  1371. Set Zone 17,0,72+ALTEZZA+1 To 639,72+ALTEZZA+1+7
  1372. YSLIDERINGRANDIMENTO=72+ALTEZZA+1
  1373. Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,0,1
  1374. Print At(0,ULTIMALINEA-5);Zone$("Frequenza",18);
  1375. Print Zone$(Chr$(147)+Chr$(148),19);
  1376. Print Zone$(Chr$(149)+Chr$(150),20);
  1377. Print ">"
  1378. Print At(26,ULTIMALINEA-5);Zone$("MixTimbri",21)
  1379. End Proc
  1380. Procedure SETTASCHERMO
  1381. If Ntsc Then LUNGHEZZASCHERMO=200 Else LUNGHEZZASCHERMO=256
  1382. If Ntsc Then RIDUZIONE=4 Else RIDUZIONE=2
  1383. ALTEZZA=256/RIDUZIONE-1 : ZERO=128/RIDUZIONE-1
  1384. ULTIMALINEA=LUNGHEZZASCHERMO/8-1
  1385. Screen Open 0,640,LUNGHEZZASCHERMO,4,Hires : Curs Off : Flash Off 
  1386. Palette $60,$CCC,$C00,$C0 : Pen 1 : Paper 0 : Cls : Curs Pen 1
  1387. Wait Vbl : Limit Mouse 
  1388. End Proc
  1389. Procedure SLIDERINGRANDIMENTO
  1390. Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,POSIZIONESLIDER,1
  1391. End Proc
  1392. Procedure SOMMA
  1393. Shared LUNGHEZZASINTETICO
  1394. For X=0 To LUNGHEZZASINTETICO-1
  1395.  DATO=Peek(Start(BANCODIIO)+X)
  1396.  If DATO>127
  1397.   Add DATO,-256
  1398.  End If 
  1399.  Add F0RMADONDA(X),DATO
  1400. Next X
  1401. End Proc
  1402. Procedure SUONA
  1403. Sam Raw 1,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
  1404. Sam Raw 2,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
  1405. End Proc
  1406. Procedure TIC[TESTO$,LINEA]
  1407. '-> Testo Invertito e Centrato by Stefano Regattin 
  1408. 'i> 23 maggio 1996 
  1409. 'm> 25 maggio 1996 
  1410. '--------------------------------------------------------------------------- 
  1411. 'LINEA contiene il numero di linea dove si posizioner� il testo; se vale -1
  1412. ' (True) il testo sar� posizionato alla linea dove si trova il cursore; in 
  1413. ' questo caso sar� necessario un comando PRINT per spostare il cursore 
  1414. '----------------------------------------------------------------------
  1415. If LINEA=True Then L=Y Curs Else L=LINEA
  1416. Locate 0,L : Inverse On : Cline : Centre TESTO$ : Inverse Off 
  1417. End Proc